#!/usr/bin/env python
# -*- coding: utf-8 -*-

import socket
from cache import *
from connection import *

class Server:
    """
    Cette classe représente le serveur proxy.
    Celui-ci est en attente de connexions. Une fois qu'un client se connecte,
    un objet Connection est créé et se charge de traiter sa requête.
    """

    def __init__(self, port = 8080):
        """
        Constructeur.
        Initialise le socket et le cache. Par défaut, le proxy écoute sur le
        port 8080.
        """

        self.sock = socket.socket(socket.AF_INET)
        self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.sock.bind(("", port))
        self.sock.listen(5)
        self.cache = Cache()

    def start(self):
        """
        Cette fonction démarre le proxy. Celui-ci est dès lors en attente
        de connexions. Une fois qu'un client se connecte, un objet 
        Connection se charge de répondre au client.
        """
        
        while True:
            sock_client, ip_client = self.sock.accept()
            print "Connexion de", ip_client, "au serveur."
            connection = Connection(sock_client, ip_client, self.cache)
            connection.start()

    def stop(self):
        """
        Cette fonction stop le proxy.
        """

        self.sock.close()
        
